/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.flowernet.faces;

import java.util.List;
import br.com.flowernet.entity.*;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import br.com.flowernet.dao.*;
import com.google.common.collect.HashBiMap;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import javax.ejb.EJB;

/**
 *
 * @author Diego
 */
@ManagedBean
@SessionScoped
public class VendaFaces {

    @EJB
    VendaDAO vendaDAO;
    @EJB
    PedidoDAO pedidoDAO;
    @EJB
    FloriculturaDAO floriculturaDAO;
    Double total = 0.0;
    List<Venda> vendas;
    Integer quant;
    Venda vendaBusca;
    Venda vendaSelecionado;
    String entrega;
    Pedido pedidoSelecionado;
    Produto produtoCarrinho;
    FormaDePagamento formadepgto;
    Long valor;
    Venda Buscavenda = new Venda();
    ProdutoFaces produtoFaces = new ProdutoFaces();
    HashMap<Produto, Integer> pedidoprodutocar = new HashMap<Produto, Integer>();
    @EJB
    PedidoProdutoDAO pedidoprodutoDAO;
    List<Floricultura> floriculturas;
    List<Produto> listChave;
    List<Integer> listValor;

    /**
     * Creates a new instance of AdvogadoFaces
     */
    public VendaFaces() {
    }

    public Venda getVendaSelecionado() {
        return vendaSelecionado;
    }

    public void setVendaSelecionado(Venda vendaSelecionado) {
        this.vendaSelecionado = vendaSelecionado;
    }

    public String iniciarAddVenda() {

        vendaSelecionado = new Venda();

        return "CadastrarVenda";

    }

    public void testar() {


        List<Produto> listChave = new ArrayList<Produto>(pedidoprodutocar.keySet());
        List<Integer> listValor = new ArrayList<Integer>(pedidoprodutocar.values());


        for (int i = 0; i < pedidoprodutocar.size(); i++) {

            System.out.println("Produto");
            System.out.println(listChave.get(i).getDescricao());
            System.out.println("Pedido");
            System.out.println(listValor.get(i));
        }

    }

    public String AddCarrinho() {


        pedidoprodutocar.put(produtoCarrinho, quant);
        System.out.println(quant);
        this.total = this.total + (produtoCarrinho.getPreco() * quant);
        quant = 0;


        return "index";
    }

    public HashMap<Produto, Integer> getPedidoprodutocar() {
        return pedidoprodutocar;
    }

    public void setPedidoprodutocar(HashMap<Produto, Integer> pedidoprodutocar) {
        this.pedidoprodutocar = pedidoprodutocar;
    }

    public String produtoSelecionado() {


        produtoFaces.setProdutoSelecionado(produtoCarrinho);
        return "adicionarCarrinho";
    }

    public Double atualizaTotal() {

        for (int i = 0; i < pedidoprodutocar.size(); i++) {
            total = 0.0;
            total = total + listChave.get(i).getPreco();
        }
        return total;
    }

    public Produto getProdutoCarrinho() {
        return produtoCarrinho;
    }

    public void setProdutoCarrinho(Produto produtoCarrinho) {
        this.produtoCarrinho = produtoCarrinho;
    }

    public String finalizarAddVenda() {

        Pedido pedido = new Pedido();
        pedido.setStatus(StatusPedido.Aguardando);
        Long IDPedido = pedidoDAO.addPedido(pedido);


        List<Produto> listChave = new ArrayList<Produto>(pedidoprodutocar.keySet());
        List<Integer> listValor = new ArrayList<Integer>(pedidoprodutocar.values());

        for (int i = 0; i < pedidoprodutocar.size(); i++) {
            PedidoProdutoPK pk = new PedidoProdutoPK();
            pk.setPedido(pedidoDAO.getPedido(IDPedido));
            pk.setProduto(listChave.get(i));
            PedidoProduto p = new PedidoProduto();
            p.setPedidoProdutoPK(pk);
            p.setQuantidade(listValor.get(i));
            pedidoprodutoDAO.addPedidoProduto(p);

        }

        Floricultura floricultura = new Floricultura();
        System.out.println(entrega);
        List<Floricultura> floriculturas = floriculturaDAO.getFloriculturaCidade(entrega);


        Venda vendaSelecionado = new Venda();
        vendaSelecionado.setFloricultura(floriculturas.get(0));
        System.out.println(floriculturas.get(0).getCidade());
        vendaSelecionado.setPedido(pedidoDAO.getPedido(IDPedido));
        vendaSelecionado.setFormaDePagamento(formadepgto);

        vendaDAO.addVenda(vendaSelecionado);
        vendaSelecionado = null;
        return "index";
    }

    public String meuCarrinho() {

        listChave = new ArrayList<Produto>(pedidoprodutocar.keySet());
        listValor = new ArrayList<Integer>(pedidoprodutocar.values());

        return "meuCarrinho";

    }

    public String LimparCarrinho() {

        pedidoprodutocar.clear();
        listChave = new ArrayList<Produto>(pedidoprodutocar.keySet());
        listValor = new ArrayList<Integer>(pedidoprodutocar.values());
        this.total = 0.0;
        return "meuCarrinho";
    }

    public String removerCarrinho() {


        pedidoprodutocar.remove(produtoCarrinho);
        total = 0.0;
        total = this.atualizaTotal();
        return "index";
    }

    public Map getEstados() {
        Map<Estados, String> estados = new HashMap<Estados, String>();
        for (Estados type : Estados.values()) {
            estados.put(type, type.name());
        }
        return estados;
    }

    public String iniciarEditarVenda() {


        return "EditarPedido";

    }

    public String finalizarEditarVenda() {

        vendaDAO.updateVenda(vendaSelecionado);
        vendaSelecionado = null;

        return "ListarVendas";
    }

    public Pedido getPedidoSelecionado() {
        return pedidoSelecionado;
    }

    public void setPedidoSelecionado(Pedido pedidoSelecionado) {
        this.pedidoSelecionado = pedidoSelecionado;
    }

    public List<Venda> getVendas() {
        vendas = vendaDAO.getAllVenda();
        return vendas;
    }

    public String excluirVenda() {
        vendaDAO.removeVenda(vendaSelecionado);
        vendaSelecionado = null;
        return "ListarVendas";
    }

    public String BuscaVenda() {
        vendaBusca = vendaDAO.getVenda(valor);
        return "BuscaVenda";
    }

    public Double getTotal() {
        return total;
    }

    public void setTotal(Double total) {
        this.total = total;
    }

    public Long getValor() {
        return valor;
    }

    public void setValor(Long valor) {
        this.valor = valor;
    }

    public FormaDePagamento getFormadepgto() {
        return formadepgto;
    }

    public void setFormadepgto(FormaDePagamento formadepgto) {
        this.formadepgto = formadepgto;
    }

    public Map getFormadePagamento() {
        Map<FormaDePagamento, String> forma = new HashMap<FormaDePagamento, String>();
        for (FormaDePagamento type : FormaDePagamento.values()) {
            forma.put(type, type.name());
        }
        return forma;
    }

    public String getEntrega() {
        return entrega;
    }

    public void setEntrega(String entrega) {
        this.entrega = entrega;
    }

    public Integer getQuant() {
        return quant;
    }

    public void setQuant(Integer quant) {
        this.quant = quant;
    }

    public List<Produto> getListChave() {
        return listChave;
    }

    public void setListChave(List<Produto> listChave) {
        this.listChave = listChave;
    }

    public List<Integer> getListValor() {
        return listValor;
    }

    public void setListValor(List<Integer> listValor) {
        this.listValor = listValor;
    }
}
